package com.wgh.product.api.client;

import com.wgh.common.vo.Result;
import com.wgh.product.dto.ProductAttributeDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 商品属性服务客户端
 * 用于其他服务调用商品属性服务的API
 */
@FeignClient(name = "shop-product", path = "/api/product-attribute")
public interface ProductAttributeClient {

    /**
     * 根据分类ID查询属性列表
     */
    @GetMapping("/category/{categoryId}")
    Result<List<ProductAttributeDTO>> getAttributesByCategoryId(@PathVariable Long categoryId);

    /**
     * 根据分类ID列表查询属性列表
     */
    @GetMapping("/categories")
    Result<List<ProductAttributeDTO>> getAttributesByCategoryIds(@RequestParam List<Long> categoryIds);

    /**
     * 查询属性名称是否存在
     */
    @GetMapping("/check")
    Result<Boolean> checkAttributeExists(@RequestParam String name, @RequestParam Long categoryId);

    /**
     * 批量删除属性
     */
    @DeleteMapping("/batch")
    Result<Boolean> deleteBatch(@RequestParam List<Long> ids);

    /**
     * 批量更新属性状态
     */
    @PutMapping("/status/batch")
    Result<Boolean> updateStatusBatch(@RequestParam List<Long> ids, @RequestParam Integer status);

    /**
     * 分页查询属性
     */
    @GetMapping("/page")
    Result<List<ProductAttributeDTO>> getAttributePage(
            @RequestParam(required = false) String keyword,
            @RequestParam(required = false) Long categoryId,
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize);

    /**
     * 根据ID查询属性详情
     */
    @GetMapping("/{id}")
    Result<ProductAttributeDTO> getAttributeById(@PathVariable Long id);

    /**
     * 根据ID列表批量查询属性
     */
    @GetMapping("/batch")
    Result<List<ProductAttributeDTO>> getAttributesByIds(@RequestParam List<Long> ids);

    /**
     * 新增属性
     */
    @PostMapping
    Result<Boolean> addAttribute(@RequestBody ProductAttributeDTO productAttributeDTO);

    /**
     * 更新属性
     */
    @PutMapping
    Result<Boolean> updateAttribute(@RequestBody ProductAttributeDTO productAttributeDTO);

    /**
     * 删除属性
     */
    @DeleteMapping("/{id}")
    Result<Boolean> deleteAttribute(@PathVariable Long id);
}